Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/backend/rngit_tool.py 06710bcd69cd22e9660aa555b44e7d1ca87d2d60 (06710bcd) Text, 9.64 KB

T8b949e# SPDX-License-Identifier: 0BSD

T8b949e"""RNGit explorer: resolve paths and run ``/git/list`` for candidate repo names."""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72import T7ee787asyncio
Tff7b72import T7ee787base64
Tff7b72import T7ee787contextlib
Tff7b72import T7ee787re
Tff7b72from T7ee787typing Tff7b72import Te6edf3Any

Tff7b72import T7ee787RNS

Te6edf3RNGIT_ANNOUNCE_ASPECT Tff7b72= Ta5d6ff"Ta5d6ffgit.repositoriesTa5d6ff"

Te6edf3RNGIT_APP_NAME Tff7b72= Ta5d6ff"Ta5d6ffgitTa5d6ff"
Te6edf3RNGIT_ASPECT Tff7b72= Ta5d6ff"Ta5d6ffrepositoriesTa5d6ff"
Te6edf3RNGIT_PATH_LIST Tff7b72= Ta5d6ff"Ta5d6ff/git/listTa5d6ff"
Te6edf3RNGIT_IDX_REPOSITORY Tff7b72= T79c0ff0x00

Te6edf3_MAX_PROBE_NAMES Tff7b72= T79c0ff64
Te6edf3_MAX_REFS_PREVIEW_CHARS Tff7b72= T79c0ff8000

Te6edf3_MAX_RNGIT_PATH_TIMEOUT_S Tff7b72= T79c0ff600.0
Te6edf3_MAX_RNGIT_LINK_TIMEOUT_S Tff7b72= T79c0ff180.0
Te6edf3_MAX_RNGIT_LIST_TIMEOUT_S Tff7b72= T79c0ff600.0


Tff7b72def Td2a8ff_clamp_timeoutTb4b4b4(
Te6edf3valueTb4b4b4: Tffa657float Tff7b72| Tff7b72NoneTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3defaultTb4b4b4: Tffa657floatTb4b4b4,
Te6edf3minimumTb4b4b4: Tffa657floatTb4b4b4,
Te6edf3maximumTb4b4b4: Tffa657floatTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657floatTb4b4b4:
Tff7b72if Te6edf3value Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3default
Tff7b72tryTb4b4b4:
Te6edf3v Tff7b72= Tffa657floatTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3default
Tff7b72if Te6edf3v Tff7b72< Te6edf3minimumTb4b4b4:
Tff7b72return Te6edf3minimum
Tff7b72return Tffa657minTb4b4b4(Te6edf3vTb4b4b4, Te6edf3maximumTb4b4b4)


Tff7b72def Td2a8ffdisplay_name_from_rngit_app_dataTb4b4b4(Te6edf3app_data_b64Tb4b4b4: Tffa657str Tff7b72| Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
T8b949e"""Decode optional rngit announce app_data (often a short node label)."""
Tff7b72if Tff7b72not Te6edf3app_data_b64Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3raw Tff7b72= Te6edf3base64Tff7b72.Td2a8ffb64decodeTb4b4b4(Te6edf3app_data_b64Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72if Tff7b72not Te6edf3rawTb4b4b4:
Tff7b72return Tff7b72None
Te6edf3text Tff7b72= Te6edf3rawTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3textTb4b4b4:
Tff7b72return Tff7b72None
Te6edf3line Tff7b72= Te6edf3textTff7b72.Td2a8ffsplitlinesTb4b4b4(Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3lineTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Te6edf3lineTb4b4b4[Tb4b4b4:T79c0ff120Tb4b4b4]


Tff7b72def Td2a8ffnormalize_destination_hash_hexTb4b4b4(Te6edf3valueTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3raw Tff7b72= Te6edf3valueTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff:Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3rawTb4b4b4) Tff7b72!= Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTH Tff7b72/Tff7b72/ T79c0ff4Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72tryTb4b4b4:
Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72except Tf85149ValueErrorTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Te6edf3raw


Tff7b72def Td2a8ffslug_segmentTb4b4b4(Te6edf3nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3s Tff7b72= Te6edf3nameTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3s Tff7b72or Tffa657lenTb4b4b4(Te6edf3sTb4b4b4) Tff7b72> T79c0ff256Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72if Tff7b72not Te6edf3reTff7b72.Td2a8fffullmatchTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff[A-Za-z0-9._-]+Ta5d6ff"Tb4b4b4, Te6edf3sTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Te6edf3s


Tff7b72def Td2a8ffparse_repository_name_linesTb4b4b4(
Te6edf3textTb4b4b4: Tffa657strTb4b4b4, Tff7b72*Tb4b4b4, Te6edf3limitTb4b4b4: Tffa657int Tff7b72= Te6edf3_MAX_PROBE_NAMES
Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3outTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3line Tff7b72in Te6edf3textTff7b72.Td2a8ffsplitlinesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3s Tff7b72= Te6edf3lineTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3s Tff7b72or Te6edf3sTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff#Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72if Tffa657lenTb4b4b4(Te6edf3outTb4b4b4) Tff7b72>Tff7b72= Te6edf3limitTb4b4b4:
Tff7b72break
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(Te6edf3sTb4b4b4)
Tff7b72return Te6edf3out


Tff7b72def Td2a8ffclone_commandTb4b4b4(Te6edf3destination_hash_hexTb4b4b4: Tffa657strTb4b4b4, Te6edf3groupTb4b4b4: Tffa657strTb4b4b4, Te6edf3repositoryTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ffgit clone rns://Tffd700{Te6edf3destination_hash_hexTffd700}Ta5d6ff/Tffd700{Te6edf3groupTffd700}Ta5d6ff/Tffd700{Te6edf3repositoryTffd700}Ta5d6ff"


Tff7b72async Tff7b72def Td2a8fflist_remote_git_refsTb4b4b4(
Te6edf3identityTb4b4b4: Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4,
Te6edf3destination_hash_hexTb4b4b4: Tffa657strTb4b4b4,
Te6edf3group_nameTb4b4b4: Tffa657strTb4b4b4,
Te6edf3repository_nameTb4b4b4: Tffa657strTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3path_timeoutTb4b4b4: Tffa657float Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3link_timeoutTb4b4b4: Tffa657float Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3list_timeoutTb4b4b4: Tffa657float Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3for_pushTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
T8b949e"""Open an rngit link and perform ``/git/list`` for ``group_name/repository_name``."""
Te6edf3norm_hash Tff7b72= Te6edf3normalize_destination_hash_hexTb4b4b4(Te6edf3destination_hash_hexTb4b4b4)
Tff7b72if Tff7b72not Te6edf3norm_hashTb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffinvalid_destination_hashTa5d6ff"Tb4b4b4}
Te6edf3group Tff7b72= Te6edf3slug_segmentTb4b4b4(Te6edf3group_nameTb4b4b4)
Te6edf3repo Tff7b72= Te6edf3slug_segmentTb4b4b4(Te6edf3repository_nameTb4b4b4)
Tff7b72if Tff7b72not Te6edf3groupTb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffinvalid_group_nameTa5d6ff"Tb4b4b4}
Tff7b72if Tff7b72not Te6edf3repoTb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffinvalid_repository_nameTa5d6ff"Tb4b4b4}

Te6edf3path_timeout Tff7b72= Te6edf3_clamp_timeoutTb4b4b4(
Te6edf3path_timeoutTb4b4b4,
Te6edf3defaultTff7b72=Tffa657floatTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffPATH_REQUEST_TIMEOUTTb4b4b4)Tb4b4b4,
Te6edf3minimumTff7b72=T79c0ff1.0Tb4b4b4,
Te6edf3maximumTff7b72=Te6edf3_MAX_RNGIT_PATH_TIMEOUT_STb4b4b4,
Tb4b4b4)
Te6edf3link_timeout Tff7b72= Te6edf3_clamp_timeoutTb4b4b4(
Te6edf3link_timeoutTb4b4b4,
Te6edf3defaultTff7b72=T79c0ff30.0Tb4b4b4,
Te6edf3minimumTff7b72=T79c0ff1.0Tb4b4b4,
Te6edf3maximumTff7b72=Te6edf3_MAX_RNGIT_LINK_TIMEOUT_STb4b4b4,
Tb4b4b4)
Te6edf3list_timeout Tff7b72= Te6edf3_clamp_timeoutTb4b4b4(
Te6edf3list_timeoutTb4b4b4,
Te6edf3defaultTff7b72=T79c0ff120.0Tb4b4b4,
Te6edf3minimumTff7b72=T79c0ff1.0Tb4b4b4,
Te6edf3maximumTff7b72=Te6edf3_MAX_RNGIT_LIST_TIMEOUT_STb4b4b4,
Tb4b4b4)

Te6edf3destination_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3norm_hashTb4b4b4)

Te6edf3loop Tff7b72= Te6edf3asyncioTff7b72.Td2a8ffget_running_loopTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)

Te6edf3deadline Tff7b72= Te6edf3loopTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3path_timeout
Tff7b72while Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3destination_hashTb4b4b4) Tff7b72and Te6edf3loopTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3deadlineTb4b4b4:
Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)

Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpath_not_foundTa5d6ff"Tb4b4b4}

Te6edf3remote_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72if Tff7b72not Te6edf3remote_identityTb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffidentity_not_foundTa5d6ff"Tb4b4b4}

Te6edf3destination Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(
Te6edf3remote_identityTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4,
Te6edf3RNGIT_APP_NAMETb4b4b4,
Te6edf3RNGIT_ASPECTTb4b4b4,
Tb4b4b4)
Te6edf3link Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4(Te6edf3destinationTb4b4b4)

Te6edf3link_ready Tff7b72= Tff7b72False
Te6edf3link_failed Tff7b72= Tff7b72False
Te6edf3done_event Tff7b72= Te6edf3asyncioTff7b72.Td2a8ffEventTb4b4b4(Tb4b4b4)
Te6edf3response_holderTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}

Tff7b72def Td2a8ffon_establishedTb4b4b4(Te6edf3lnkTb4b4b4: Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3link_readyTb4b4b4, Te6edf3link_failed
Tff7b72tryTb4b4b4:
Te6edf3lnkTff7b72.Td2a8ffidentifyTb4b4b4(Te6edf3identityTb4b4b4)
Te6edf3link_ready Tff7b72= Tff7b72True
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3link_failed Tff7b72= Tff7b72True

Tff7b72def Td2a8ffon_closedTb4b4b4(Te6edf3_lnkTb4b4b4: Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3link_failed
Tff7b72if Tff7b72not Te6edf3link_readyTb4b4b4:
Te6edf3link_failed Tff7b72= Tff7b72True

Te6edf3linkTff7b72.Td2a8ffset_link_established_callbackTb4b4b4(Te6edf3on_establishedTb4b4b4)
Te6edf3linkTff7b72.Td2a8ffset_link_closed_callbackTb4b4b4(Te6edf3on_closedTb4b4b4)

Tff7b72tryTb4b4b4:
Te6edf3deadline Tff7b72= Te6edf3loopTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3link_timeout
Tff7b72while Tff7b72not Te6edf3link_ready Tff7b72and Tff7b72not Te6edf3link_failed Tff7b72and Te6edf3loopTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3deadlineTb4b4b4:
Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)

Tff7b72if Tff7b72not Te6edf3link_ready Tff7b72or Te6edf3link_failedTb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fflink_failedTa5d6ff"Tb4b4b4}

Te6edf3repo_path Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3groupTffd700}Ta5d6ff/Tffd700{Te6edf3repoTffd700}Ta5d6ff"
Te6edf3request_dataTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72= Tb4b4b4{
Te6edf3RNGIT_IDX_REPOSITORYTb4b4b4: Te6edf3repo_pathTb4b4b4,
Ta5d6ff"Ta5d6fffor_pushTa5d6ff"Tb4b4b4: Tffa657boolTb4b4b4(Te6edf3for_pushTb4b4b4)Tb4b4b4,
Tb4b4b4}

Tff7b72def Td2a8ffon_responseTb4b4b4(Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Te6edf3response_holderTb4b4b4[Ta5d6ff"Ta5d6ffresponseTa5d6ff"Tb4b4b4] Tff7b72= Tffa657getattrTb4b4b4(Te6edf3request_receiptTb4b4b4, Ta5d6ff"Ta5d6ffresponseTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Te6edf3loopTff7b72.Td2a8ffcall_soon_threadsafeTb4b4b4(Te6edf3done_eventTff7b72.Td2a8ffsetTb4b4b4)

Tff7b72def Td2a8ffon_failedTb4b4b4(Te6edf3_request_receiptTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3response_holderTb4b4b4[Ta5d6ff"Ta5d6ffresponseTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Te6edf3loopTff7b72.Td2a8ffcall_soon_threadsafeTb4b4b4(Te6edf3done_eventTff7b72.Td2a8ffsetTb4b4b4)

Te6edf3receipt Tff7b72= Te6edf3linkTff7b72.Td2a8ffrequestTb4b4b4(
Te6edf3RNGIT_PATH_LISTTb4b4b4,
Te6edf3request_dataTb4b4b4,
Te6edf3response_callbackTff7b72=Te6edf3on_responseTb4b4b4,
Te6edf3failed_callbackTff7b72=Te6edf3on_failedTb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3list_timeoutTb4b4b4,
Tb4b4b4)
Tff7b72if Te6edf3receipt Tff7b72is Tff7b72FalseTb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffrequest_not_sentTa5d6ff"Tb4b4b4}

Tff7b72tryTb4b4b4:
Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffwait_forTb4b4b4(Te6edf3done_eventTff7b72.Td2a8ffwaitTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3timeoutTff7b72=Te6edf3list_timeout Tff7b72+ T79c0ff5.0Tb4b4b4)
Tff7b72except Tf85149TimeoutErrorTb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fflist_timeoutTa5d6ff"Tb4b4b4}

Te6edf3response Tff7b72= Te6edf3response_holderTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffresponseTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3response Tff7b72is Tff7b72None Tff7b72or Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3responseTb4b4b4, Tb4b4b4(Tffa657bytesTb4b4b4, Tffa657bytearrayTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffinvalid_responseTa5d6ff"Tb4b4b4}

Te6edf3body Tff7b72= Tffa657bytesTb4b4b4(Te6edf3responseTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3bodyTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffempty_responseTa5d6ff"Tb4b4b4}

Te6edf3status_byte Tff7b72= Te6edf3bodyTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3payload Tff7b72= Te6edf3bodyTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]
Tff7b72if Te6edf3status_byte Tff7b72!= T79c0ff0Tb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Te6edf3payloadTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72or Ta5d6ff"Ta5d6ffserver_refusedTa5d6ff"Tb4b4b4,
Tb4b4b4}

Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4, Ta5d6ff"Ta5d6ffrefsTa5d6ff"Tb4b4b4: Te6edf3payloadTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)Tb4b4b4}
Tff7b72finallyTb4b4b4:
Tff7b72with Te6edf3contextlibTff7b72.Td2a8ffsuppressTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Te6edf3linkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)


Tff7b72async Tff7b72def Td2a8ffprobe_repositoriesTb4b4b4(
Te6edf3identityTb4b4b4: Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4,
Te6edf3destination_hash_hexTb4b4b4: Tffa657strTb4b4b4,
Te6edf3group_nameTb4b4b4: Tffa657strTb4b4b4,
Te6edf3repository_namesTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3path_timeoutTb4b4b4: Tffa657float Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3link_timeoutTb4b4b4: Tffa657float Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3list_timeoutTb4b4b4: Tffa657float Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3for_pushTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4,
Te6edf3max_preview_charsTb4b4b4: Tffa657int Tff7b72= Te6edf3_MAX_REFS_PREVIEW_CHARSTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
T8b949e"""Try ``/git/list`` for each repository name; used when rngit has no index endpoint."""
Te6edf3norm Tff7b72= Te6edf3normalize_destination_hash_hexTb4b4b4(Te6edf3destination_hash_hexTb4b4b4)
Tff7b72if Tff7b72not Te6edf3normTb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffinvalid_destination_hashTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffresultsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}
Te6edf3group Tff7b72= Te6edf3slug_segmentTb4b4b4(Te6edf3group_nameTb4b4b4)
Tff7b72if Tff7b72not Te6edf3groupTb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffinvalid_group_nameTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffresultsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}

Te6edf3trimmed Tff7b72= Tb4b4b4[Te6edf3nTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3n Tff7b72in Te6edf3repository_names Tff7b72if Te6edf3nTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4]Tb4b4b4[Tb4b4b4:Te6edf3_MAX_PROBE_NAMESTb4b4b4]
Tff7b72if Tff7b72not Te6edf3trimmedTb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffno_repository_namesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffresultsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}

Te6edf3resultsTb4b4b4: Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3raw Tff7b72in Te6edf3trimmedTb4b4b4:
Te6edf3repo Tff7b72= Te6edf3slug_segmentTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72if Tff7b72not Te6edf3repoTb4b4b4:
Te6edf3resultsTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffrepositoryTa5d6ff"Tb4b4b4: Te6edf3rawTb4b4b4,
Ta5d6ff"Ta5d6ffreachableTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffinvalid_repository_nameTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffclone_commandTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72continue

Te6edf3listed Tff7b72= Tff7b72await Te6edf3list_remote_git_refsTb4b4b4(
Te6edf3identityTb4b4b4,
Te6edf3normTb4b4b4,
Te6edf3groupTb4b4b4,
Te6edf3repoTb4b4b4,
Te6edf3path_timeoutTff7b72=Te6edf3path_timeoutTb4b4b4,
Te6edf3link_timeoutTff7b72=Te6edf3link_timeoutTb4b4b4,
Te6edf3list_timeoutTff7b72=Te6edf3list_timeoutTb4b4b4,
Te6edf3for_pushTff7b72=Te6edf3for_pushTb4b4b4,
Tb4b4b4)
Te6edf3cmd Tff7b72= Te6edf3clone_commandTb4b4b4(Te6edf3normTb4b4b4, Te6edf3groupTb4b4b4, Te6edf3repoTb4b4b4)
Tff7b72if Te6edf3listedTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3refs Tff7b72= Te6edf3listedTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffrefsTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"
Te6edf3resultsTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffrepositoryTa5d6ff"Tb4b4b4: Te6edf3repoTb4b4b4,
Ta5d6ff"Ta5d6ffreachableTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Ta5d6ff"Ta5d6ffrefs_previewTa5d6ff"Tb4b4b4: Te6edf3refsTb4b4b4[Tb4b4b4:Te6edf3max_preview_charsTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffrefs_truncatedTa5d6ff"Tb4b4b4: Tffa657lenTb4b4b4(Te6edf3refsTb4b4b4) Tff7b72> Te6edf3max_preview_charsTb4b4b4,
Ta5d6ff"Ta5d6ffclone_commandTa5d6ff"Tb4b4b4: Te6edf3cmdTb4b4b4,
Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3resultsTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffrepositoryTa5d6ff"Tb4b4b4: Te6edf3repoTb4b4b4,
Ta5d6ff"Ta5d6ffreachableTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6ffrefs_previewTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6ffrefs_truncatedTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6ffclone_commandTa5d6ff"Tb4b4b4: Te6edf3cmdTb4b4b4,
Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Te6edf3listedTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)

Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3normTb4b4b4,
Ta5d6ff"Ta5d6ffgroup_nameTa5d6ff"Tb4b4b4: Te6edf3groupTb4b4b4,
Ta5d6ff"Ta5d6ffresultsTa5d6ff"Tb4b4b4: Te6edf3resultsTb4b4b4,
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────